package com.tabnet.servlet.client;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.commande.Commande;
import com.tabnet.beans.personnes.Client;
import com.tabnet.dao.DAOCommande;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.dao.DAOLigneCommande;
import com.tabnet.form.client.SupprimerProduitForm;

public class SupprimerProduit extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	public static final String ATT_FORM        	= "form";
    public static final String SESSION_COMMANDE = "commande";
    public static final String SESSION_USER 	= "sessionClient";
    public static final String PARAM_PRODUIT	= "prod";
    public static final String VUE              = "/index.jsp";
    public static final String VUE_SUCCES 	    = "/adminClient/accueil.jsp";
    public static final String VUE_SUCCES_BIS   = "/adminClient/panier.jsp";

    private DAOCommande _DaoCommande;
    private DAOLigneCommande _DaoLigneCommande;
    
    public void init() throws ServletException {
        /* Récupération d'une instance de notre DAO Utilisateur */
    	try {
			this._DaoLigneCommande = DAOFactory.getInstance().getLigneCommandeDAO();
			this._DaoCommande = DAOFactory.getInstance().getCommandeDAO();
		}
    	catch (DAOException e) {
			e.printStackTrace();
		}
    }
    
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        // Récupération de la valeur de l'URL
        int idLigne = Integer.parseInt(getValeurParametre( request, PARAM_PRODUIT ));
        
        HttpSession session = request.getSession();

    	Client oClient = (Client) session.getAttribute(SESSION_USER);
    	Commande oCommande = (Commande) session.getAttribute(SESSION_COMMANDE);
    	
    	if(oClient == null)
            this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );

    	SupprimerProduitForm form = new SupprimerProduitForm(this._DaoLigneCommande, this._DaoCommande);
        form.supprLigneCommande(request, oCommande, idLigne);

        request.setAttribute( ATT_FORM, form );
        
        if (form.getErreurs().isEmpty()) {        	
            session.setAttribute( SESSION_COMMANDE, oCommande);
            if(oCommande.getLigneCommandes().size() == 0)
            	response.sendRedirect( request.getContextPath() + VUE_SUCCES);
            else
            	response.sendRedirect( request.getContextPath() + VUE_SUCCES_BIS);
        }
        else {
            session.setAttribute( SESSION_COMMANDE, oCommande);
            response.sendRedirect( request.getContextPath() + VUE );
        }
    }

    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        this.doGet(request, response);
    }
    
    /**
     * <p>Fonction static getValeurParametre<br />
     * Utilitaire qui retourne null si un paramètre est vide, et son
     * contenu sinon.</p>
     * @param request : objet HttpServletRequest
     * @param nomChamp : nom du champ
     * @return la valeur du champ
     */
    private static String getValeurParametre( HttpServletRequest request, String nomChamp ) {
        String valeur = request.getParameter( nomChamp );
        if ( valeur == null || valeur.trim().length() == 0 ) {
            return null;
        } else {
            return valeur;
        }
    }

}
